package com.sodimac.v2s.commands
{
	import com.adobe.cairngorm.commands.ICommand;
	import com.adobe.cairngorm.control.CairngormEvent;
	import com.sodimac.util.alerts.alert;
	import com.sodimac.util.commons.UtilString;
	import com.sodimac.util.commons.UtilXml;
	import com.sodimac.v2s.business.SfpcProdDelegate;
	import com.sodimac.v2s.events.cargarInfoSfpcProdEvent;
	import com.sodimac.v2s.model.ComprasModelLocator;
	import com.sodimac.v2s.vo.InfoSfpVO;
	import com.sodimac.v2s.vo.SfpcProdCorpVO;
	import com.sodimac.v2s.vo.SfpcProdNacVO;
	
	import mx.collections.ArrayCollection;
	import mx.controls.DateField;
	import mx.rpc.IResponder;
	
	public class obtenerInfoSfpcProdCommand implements ICommand, IResponder
	{
		private var modelo:ComprasModelLocator = ComprasModelLocator.getInstance();
		private var strMetodo:String ="";
		private var ig:Number =0;
		
		public function execute(event:CairngormEvent):void
		{
			var delegate:SfpcProdDelegate = new SfpcProdDelegate(this);
			var sfpcpEvt:cargarInfoSfpcProdEvent = cargarInfoSfpcProdEvent(event);
			
			strMetodo = sfpcpEvt.metodo;
			ig = sfpcpEvt.igRequest;
			
			if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorp"))
			{
				delegate.ConsultaPedidoCorp(modelo.cabecera,sfpcpEvt.idPedidoCorp);
			}
			else if (UtilString.equalsIgnoreCase(strMetodo, "consultaResumen"))
			{
				delegate.ConsultaResumen(modelo.cabecera, sfpcpEvt.idEmpresa, sfpcpEvt.idPedidoCorp);
			}			 
			else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoHom"))
			{
				delegate.ConsultaPedidoCorpProductoHom(modelo.cabecera, sfpcpEvt.idEmpresa, sfpcpEvt.idPedidoCorp, sfpcpEvt.igRequest);
			}
			else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoPais"))
			{
				delegate.ConsultaPedidoCorpProductoPais(modelo.cabecera, sfpcpEvt.idEmpresa, sfpcpEvt.idPedidoCorp, sfpcpEvt.igRequest);
			}
			else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoHomPrice"))
			{
				delegate.ConsultaPedidoCorpProductoHomPrice(modelo.cabecera, sfpcpEvt.idEmpresa, sfpcpEvt.idPedidoCorp, sfpcpEvt.igRequest);
			}
			else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoPaisPrice"))
			{
				delegate.ConsultaPedidoCorpProductoPaisPrice(modelo.cabecera, sfpcpEvt.idEmpresa, sfpcpEvt.idPedidoCorp, sfpcpEvt.igRequest);
			}			

			

		}
		
        public function result(obj: Object): void
        {            
			var xml:XML = new XML(obj.result);
			var xmlList:XMLList;
			xml = UtilXml.removeNamespacesFromXML(xml);
			xmlList = xml.children();
			
			var result:Number = Number(xmlList.cabecera.@id);
			var glosa:String =  xmlList.cabecera.@glosa;
			trace("WS SolicitudFPCorporativa["+strMetodo+"] response id=" +result);
			//trace("XML " +  xmlList.toXMLString());

	  	      switch (result){
	  	      case 0:   //Ok
	  	      			var xmlInfo:XMLList; 
	  	      			
						if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorp"))
						{
							xmlInfo = xmlList.payload.infoSfpc;
							procesaEncabezadoSFPC(xmlInfo);
						}
						else if (UtilString.equalsIgnoreCase(strMetodo, "consultaResumen"))
						{
							xmlInfo = xmlList.payload.resumenProductos;
							procesaResumen(xmlInfo);
						}						 
						else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoHom"))
						{
							xmlInfo = xmlList.payload.detallePedidoCorp;
							procesaProductosHom(xmlInfo);
						}	  	      			
						else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoPais"))
						{
							xmlInfo = xmlList.payload.detallePedidoCorp.productosCompraNac;
							procesaProductosNac(xmlInfo);
						}
						else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoHomPrice"))
						{
							xmlInfo = xmlList.payload.detallePedidoCorp;
							procesaProductosHomPrice(xmlInfo);
						}	  	      			
						else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoPaisPrice"))
						{
							xmlInfo = xmlList.payload.detallePedidoCorp.productosCompraNac;
							procesaProductosNacPrice(xmlInfo);
						}						
	  	      			break;
	  	      			
	  	      case 1:   //Error
	  	      			alert.error("Ha ocurrido un error:\n\n"+  glosa);
	  	      			break;
	  	      			
	  	      default:  //reintentar
	  	      	  	    alert.info("Problemas con respuesta del servicio, " + 
									"favor reintente mas tarde.\n\n"+ glosa);
	  	      			break;                  	      						
	  	      }


        }
                
        public function fault(obj: Object): void
        {
        	alert.error("Ha Ocurrido un Error al consultar Productos.");
        }
        
        
        
		private function procesaProductosHom(productos:XMLList):void 
		{
			var prodCorpArr:ArrayCollection = new ArrayCollection();
			var paisesArr:Array = new Array();
			var countEliminados:Number = 0;
			
			for each(var detalle:XML in productos.estadoProducto)			
			{
				var idProblema:Number =  Number(detalle.@idProblema);
				var problemName:String = String(detalle.@glosa);

				for each(var producto:XML in detalle.ProductosCorp.ProductoCorp)			
				{
	                 var tmpProd: SfpcProdCorpVO = new SfpcProdCorpVO();
	                 tmpProd.id = idProblema;
 				 	 tmpProd.problem_name = problemName;

	                 tmpProd.vin = String(producto.idProductoCorp);
	                 tmpProd.vc_vin = String(producto.vc_vin);
	                 tmpProd.ean = Number(producto.ean);
	                 tmpProd.description = String(producto.description);
	                 tmpProd.moq = Number(producto.moq);
	                 tmpProd.moneda = String(producto.moneda);
	                 tmpProd.unit_kgs = Number(producto.unitKgs);
	                 tmpProd.unit_cbm = Number(producto.unitCbm);
	                 tmpProd.unit_price = Number(producto.precioInicial);
	                 tmpProd.price_vendor = Number(producto.precioVendor);
	                 tmpProd.sub_quantity = Number(producto.cantFinal);
	                 tmpProd.sub_quantity_original = Number(producto.cantFinal);
	                 tmpProd.quantity_vendor = Number(producto.cantVendor);
	                 tmpProd.quantity_vendor_original = Number(producto.cantVendor);
	                 tmpProd.sub_total = Number(tmpProd.unit_price * tmpProd.sub_quantity);
	                 tmpProd.sub_total_vendor = Number(tmpProd.price_vendor * tmpProd.quantity_vendor);
	                 
	                 //datos para IG8
	                 tmpProd.vprice          = Number(producto.precioVendor);
	                 tmpProd.original_vprice = Number(producto.precioVendor);
	                 tmpProd.vquantity       = Number(producto.cantVendor);
	                 tmpProd.original_vquantity = Number(producto.cantVendor);
	                 tmpProd.vproblem = " ";
	                 tmpProd.note = "";
	                 
	                 //dato para omitir
	                 tmpProd.estadoProd = false;
	                 tmpProd.esEditable = 1;
	                 
					if ( tmpProd.sub_quantity == 0)
					{
					 	//countEliminados += 1;
					 	tmpProd.id  = 0;
					 	tmpProd.problem_name = "Eliminado";
					 	tmpProd.estadoProd = true;
					 	tmpProd.esEditable = 0;
					}		                 
					tmpProd.original_estadoProd = tmpProd.estadoProd;
	                 
					for each(var pais:XML in producto.productosPaisCorp.productoPais)			
					{
						var idPais:String = UtilString.toLowerCase(pais.@codigo)+ "_";
	   					tmpProd[idPais + "sku"] = String(pais.sku);						
						tmpProd[idPais + "tipology"] = Number(pais.idTipologia);
						tmpProd[idPais + "description"] = String(pais.description);
						tmpProd[idPais + "price_initial"] = Number(pais.precioInicial);
						tmpProd[idPais + "quantity"] = Number(pais.cantFinal);
						tmpProd[idPais + "case_pack"] = Number(pais.qtyCasePack);
						tmpProd[idPais + "sub_price"] = Number(pais.cantFinal * tmpProd.unit_price);
						tmpProd[idPais + "sub_kgs"]   = Number(pais.cantFinal * tmpProd.unit_kgs);
						tmpProd[idPais + "sub_cbm"]   = Number(pais.cantFinal * tmpProd.unit_cbm);
						var tol:Number = pais.tolerancia;
						var cantidad:Number = pais.cantFinal;
						if ( (!isNaN(tol)) && (Number(tol)>0))
						{
							tmpProd[idPais + "max_tolerancia"] =  cantidad + Math.round( (cantidad*tol)/100); 
						}
						else
						{
							tmpProd[idPais + "max_tolerancia"] = cantidad;
						}
						
						//set country array  
						if (paisesArr.indexOf(String(pais.@codigo)) < 0)
						{
							paisesArr.push(String(pais.@codigo));
						}
						
					}
					                  
				 prodCorpArr.addItem(tmpProd);
				 
				}                         
            }
            modelo.paisesData = paisesArr;
            //modelo.countEliminadosCorp = countEliminados;
            modelo.prodConjHomData = prodCorpArr;
            trace('--> ProductosHomSFPC con datos: prodConjHomData');
            
		}	        
        

		private function procesaProductosHomPrice(productos:XMLList):void 
		{
			var prodCorpArr:ArrayCollection = new ArrayCollection();
			var paisesArr:Array = new Array();
			
//			trace(" ------- obtenerInfoSpfcProdCommand.procesaProductosHomPrice ----------- ");
//			trace(productos.toXMLString());
//			trace(" ------------------- ");
			
			for each(var detalle:XML in productos.estadoProducto)			
			{

				for each(var producto:XML in detalle.ProductosCorp.ProductoCorp)			
				{
	                var tmpProd: Object = new Object();

	                tmpProd.vin = String(producto.idProductoCorp);
	                tmpProd.unit_price = Number(producto.precioInicial);
					for each(var pais:XML in producto.productosPaisCorp.productoPais)			
					{
						var idPais:String = UtilString.toLowerCase(pais.@codigo)+ "_";
						tmpProd[idPais + "price_initial"] = Number(pais.precioInicial);
					}
					                  
				 	prodCorpArr.addItem(tmpProd);
				 
				}                         
            }
            modelo.prodConjHomPrice = prodCorpArr;
            trace('--> ProductosHomSFPC PRICE con datos: prodConjHomPrice');
            
		}       
       
        
        
		private function procesaProductosNacPrice(productos:XMLList):void 
		{
//			trace(" ------- obtenerInfoSpfcProdCommand.procesaProductosNacPrice ----------- ");
//			trace(productos);
//			trace(" ------------------- ");
			var sfpcProdEvent:cargarInfoSfpcProdEvent = new cargarInfoSfpcProdEvent();
			sfpcProdEvent.metodo = "consultaPedidoCorpProductoHomPrice";
			sfpcProdEvent.idEmpresa =  modelo.sesion.empresa;
			sfpcProdEvent.idPedidoCorp = modelo.sesion.pedidoCorpId;
			sfpcProdEvent.igRequest = ig;
			sfpcProdEvent.dispatch();			
			
			var prodNacArr:ArrayCollection = new ArrayCollection();
			var paisesArr:Array = new Array();
			var countEliminados:Number = 0;
			
			for each(var prodPais:XML in productos.productosPais)			
			{
                var idPais:String = prodPais.@codigo;
//              trace("PAIS:  " + idPais);
				for each(var estado:XML in prodPais.estadoProductos)			
				{
// 					var glosa:String = estado.@glosa;
// 					trace("PROBLEM:  " + glosa);				
					for each(var producto:XML in estado.producto)			
					{
	                	var tmpProd:Object = new Object();
	   					tmpProd.idPais = idPais;
	   					tmpProd.sku = String(producto.sku);	
						tmpProd.unitPrice = Number(producto.precioUnit);
//	   				    trace("PROD:  " + tmpProd.sku);				
						prodNacArr.addItem(tmpProd);
						
					}
				}
            }
            modelo.prodConjNacPrice = prodNacArr;
            trace('--> ProductosNac con datos : prodConjNacPrice');
		} 
		


		private function procesaProductosNac(productos:XMLList):void 
		{
			trace(" ------- obtenerInfoSpfcProdCommand.procesaProductosNacPrice ----------- ");
			trace(productos);
//			trace(" ------------------- ");
			
			var sfpcProdEvent:cargarInfoSfpcProdEvent = new cargarInfoSfpcProdEvent();
			sfpcProdEvent.metodo = "consultaPedidoCorpProductoHom";
			sfpcProdEvent.idEmpresa =  modelo.sesion.empresa;
			sfpcProdEvent.idPedidoCorp = modelo.sesion.pedidoCorpId;
			sfpcProdEvent.igRequest = ig;
			sfpcProdEvent.dispatch();			
			
			var prodNacArr:ArrayCollection = new ArrayCollection();
			var paisesArr:Array = new Array();
			var countEliminados:Number = 0;
			
			for each(var prodPais:XML in productos.productosPais)			
			{
                var prodPaisArr:ArrayCollection = new ArrayCollection();
                var idPais:String = prodPais.@codigo;
                
				for each(var estado:XML in prodPais.estadoProductos)			
				{
                	var problemId:Number =  Number(estado.@idProblema);
   					var glosa:String = estado.@glosa;				
               
					for each(var producto:XML in estado.producto)			
					{
	                	var tmpProd:SfpcProdNacVO = new SfpcProdNacVO();
	   					tmpProd.idPais = idPais;
	   					tmpProd.idProblem = problemId;
	   					tmpProd.glosaProblem = glosa;
	   					tmpProd.sku = producto.sku;						
						tmpProd.tipology = producto.idTipologia;
						tmpProd.paisDescr = producto.description;
						tmpProd.paisQuantity = producto.cantFinal;
						tmpProd.paisQuantityOriginal = producto.cantFinal;
						tmpProd.vendorQuantity = producto.cantVendor;
						tmpProd.casePack = producto.qtyCasePack;
						tmpProd.unitPrice = producto.precioUnit;
						tmpProd.unitKgs   = producto.kgsUnit;
						tmpProd.unitCbm   = producto.cbmUnit;					
						tmpProd.tolerancia = producto.tolerancia;
						tmpProd.vendorPrice = producto.precioVendor;
						
						//datos para IG8
						tmpProd.vprice          = producto.precioVendor;
						tmpProd.original_vprice = producto.precioVendor;
						tmpProd.vquantity       = producto.cantVendor;
						tmpProd.original_vquantity = producto.cantVendor;
						tmpProd.vproblem =  " ";   //debe ir vacío
						tmpProd.note = "";
						
						//para omitir
						tmpProd.estadoProd = false;
						tmpProd.esEditable = 1;
						
						tmpProd.subPrice  = Number(tmpProd.paisQuantity * tmpProd.unitPrice);
						tmpProd.subKgs    = Number(tmpProd.paisQuantity * tmpProd.unitKgs);
						tmpProd.subCbm    = Number(tmpProd.paisQuantity * tmpProd.unitCbm);
						tmpProd.subPriceVendor = Number(tmpProd.vendorQuantity * tmpProd.vendorPrice);
						tmpProd.subKgsVendor   = Number(tmpProd.vendorQuantity * tmpProd.unitKgs);
						tmpProd.subCbmVendor   = Number(tmpProd.vendorQuantity * tmpProd.unitCbm);
						prodPaisArr.addItem(tmpProd);
						
						if (tmpProd.paisQuantity==0)
						{
							//countEliminados += 1;
							tmpProd.idProblem = 0;
	   						tmpProd.glosaProblem = "Eliminado";	
	   						tmpProd.estadoProd = true;
	   						tmpProd.esEditable = 0;					
						}
						tmpProd.original_estadoProd = tmpProd.estadoProd;
						
					}
					                  
				}
				if (prodPaisArr.length > 0)
				{
					prodNacArr.addItem(prodPaisArr);
					//set country array  
					if (paisesArr.indexOf(idPais) < 0)
					{
						paisesArr.push(idPais);
					} 						
				}
            }
            modelo.paisesNacData = paisesArr;
            modelo.prodConjNacData = prodNacArr;
          //  modelo.countEliminadosNac = countEliminados;
            trace('--> ProductosNac con datos : prodConjNacData');
		} 



		
		
		private function procesaResumen(resumenList:XMLList):void 
		{
			var resumenArr: Array = new Array();
			//trace(" ------- obtenerInfoSpfcProdCommand.procesaResumen ----------- ");
			//trace(resumenList);
			//trace(" ------------------- ");
			
			for each(var resumen:XML in resumenList.resumenProducto)			
			{
				var tmpObj:Object = new Object();
				
				tmpObj.id = Number(resumen.@id);
				tmpObj.glosa =  String(resumen.glosa); 
				tmpObj.cantidad = Number(resumen.cantidad);
				
				resumenArr.push(tmpObj);
			}
			modelo.resumenDataPro = resumenArr;
			trace('--> Resumen Problema con datos');
			
					
		} 
        
		private function procesaEncabezadoSFPC(sfpList:XMLList):void 
		{
 			var imXml:XML = new XML(modelo.sesion.intMerchant);
 			
			//trace(" ------- obtenerInfoSpfcCommand.procesaEncabezadoSFPC ----------- ");
			//trace(sfpList);
			//trace(" ------------------- ");
			
			//trace(" ------- Int Merchant ----------- ");
			//trace(imXml);
			//trace(" ------------------- ");

			for each(var data:XML in sfpList)			
			{
	            var tmpSfp:InfoSfpVO = new InfoSfpVO();
	            var strFecha:String ="";
	            
				 tmpSfp.numeroSFP = data.sfpc;
				 strFecha = String(data.fecha).substr(0,10);
	             tmpSfp.fecha = DateField.stringToDate(strFecha, "YYYY-MM-DD");
	             tmpSfp.estado =  UtilString.isBlank(data.estado)? "RECEPCIONADO": data.estado; 
	             tmpSfp.numeroOC = "";
				 tmpSfp.version = UtilString.isBlank(data.version)? "1.0": data.version;
				 tmpSfp.merchantId = data.idIntMerchant;
				 tmpSfp.merchantNombre = imXml.row.(@id==String(tmpSfp.merchantId)).@apellidoNombre;
				 tmpSfp.proveedorId = data.idProvCorp;
				 tmpSfp.proveedorNombre = data.proveedor;
				 tmpSfp.empresaId = "";
	
				 modelo.sfpcData = tmpSfp;
			}
			trace('--> sfpcData con datos');
			
					
		}        
        					
	}
}